package com.zfzs.post.service;

import com.zfzs.post.common.security.AuthorizationUser;
import com.zfzs.post.model.dto.*;
import com.zfzs.post.model.vo.AgentMineInfoVO;
import com.zfzs.post.model.vo.AgentVO;
import com.zfzs.post.model.vo.TeamListVO;
import com.zfzs.post.modules.agent.domain.Agent;
import com.zfzs.post.modules.agent.service.dto.AgentDTO;

import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
* 用户接口
* @author: ck
* @create: 2019/8/13/16:46
**/
public interface UserService {
    /**
     * 根据手机号码查询
     * @param phone 手机号码
     */
    AgentVO queryByPhone(String phone);

    /**
     * 根据id查询
     * @param id 主键id
     */
    AgentVO queryCacheById(Long id);

    /**
     * 刷新token
     */
    Map<String,String> refreshToken(RefreshTokenDTO dto);


    /**
     * 手机号码注册
     * @param dto
     * @return
     */
    Map<String,String> registePhone(UseRegisterDTO dto);

    /**
     * 增加用户信息
     * @param dto
     * @param userType
     * @return
     */
    Agent insertAgent(UseRegisterDTO dto, Integer userType);

    /**
     * 退出登录
     */
    void loginOut(HttpServletRequest request);

    /**
     * 验证主键是否可用,可用则返回
     * @param id
     * @return
     */
    Long verifyId(Long id);

    /**
     * 找回密码
     */
    void forgetPwd(ForgetPwdDTO dto);

    /**
     * 修改密码
     */
    void updatePwd(UpdatePwdDTO dto);

    /**
     * 查询账号是否存在
     */
    boolean isAgentById(Long id);

    /**
     * 校验密码否正确
     */
    boolean isPwdCorrect(AgentDTO agent,String pwd);

    /**
     * 修改密码
     */
    void updatePassword(AgentDTO dto);

    /**
     * 校验用户是否存在
     * @return
     */
    Agent isUserPre();

    /**
     * 用户密码登录
     */
    Map<String,String> loginPWd(AuthorizationUser authorizationUser);

    /**
     * 用户验证码登录
     */
    Map<String,String> loginSmsCode(LoginCodeDTO dto);


    /**
     * 获取登录人信息
     */
    Map<String,Object> getUserInfo();

    /**
     * 实名认证
     */
    void verified(VerifiedDTO dto);

    /**
     * 修改银行卡信息
     * @param agentId 所属人信息
     * @param bankNo 银行卡号
     */
    void updateBank(Long agentId,String bankNo,String bankName,String phone);

    /**
     * 修改提现密码
     * @param agentId 代理商id
     * @param pwd 密码
     */
    void updateWithdrawPwd(Long agentId,String pwd);

    /**
     * 修改体现密码
     * @param dto
     */
    void updateWithdrawPwd(UpdatePwdDTO dto);

    /**
     * 提现密码
     * @param dto
     */
    void forgetWithdrawPwd(ForgetPwdDTO dto);
    /**
     * 修改结算卡信息
     */
    void updateSettleInfo(UpdateSettleDTO dto);

    /**
     * 修改身份证号码
     */
    void updateIDCardNo(UpdateIDCardNoDTO dto);

    /**
     * 修改手机号码
     */
    void updatePhone(UpdatePhoneDTO dto);

    /**
     * 修改身份证姓名
     */
    void updateIDCardName(UpdateIDCardNameDTO dto);


    /**
     * 提现操作
     */
    void withdrawMoney(WithdrawDTO map);

    /**
     * 提现页面
     */
    Map<String,Object> agetWithdrawInfow();

    /**
     * 修改结算卡号页面
     */
    Map<String,Object> getSettCardInfo();
    /**
     * 修改结算卡号
     */
    void updateSettCardInfo(BankInfoDTO dto);

    /**
     * 提现明细
     */
    Map<String,Object> getWithdrawList();

    /**
     * 查询下级客户列表
     * @return
     */
    Map<String,Object> getSubAgentList();

    /**
     * 根据姓名或者手机号码搜索
     */
    Map<String,Object> getAgentListByKeywords(QueryAgnetListDTO dto);
    /**
     * 根据姓名或者手机号码搜索
     */
    Map<String,Object> getAgentByIdsList(QueryAgnetTypeListDTO dto);

    /**
     * 代理商团队列表查询
     */
    Map<String,Object> getAgentPageList(QueryAgentPageListDTO dto);
    /**
     * 修改头像
     */
    void updateheadImg(IdDTO dto);

    /**
     *  个人信息
     * @return
     */
    AgentMineInfoVO myIndexInfo();

    /**
     *  新增用户
     * @param addAgentDTO
     */
    void addAgentByUpper(AddAgentDTO addAgentDTO);

    /**
     * 获取团队列表
     * @return
     */
    Map<String,Object> getTeamList();

    /**
     * 获取所有下级
     * @return
     */
    Map<String, Object> getAllChild();

    /**
     * 获取团队排名列表
     * @param query
     * @return
     */
    Map<String,Object> getTeamRankPage(QueryTeamRankPageDTO query);
}
